多型與虛擬函數
虛擬函數是一種特殊的成員函數,它允許派生類重寫基類的函數,以便在運行時根據對象的具體類型來調用相應的方法。這樣可以實現動態綁定
基本概念
在基類中使用virtual聲明虛擬函數
派生類重寫基類的函數時,通常使用override來增強可讀性
使用基類指針或引用派生類對象時,會根據對象的實際類型來調用正確的方法
虛擬函數的特點
1.動態綁定:虛擬函數允許在運行時確定要調用的函數而不是在編譯時
2.基類指針或引用:虛擬函數通常用於基類指針或引用指向派生類對象的情況,以實現多型
3.虛擬建構子:若類中定義了虛擬函數,建議也將解構子定義為虛擬的,可以正確清理派生類對象
virtual void makeSound() const:在基類中定義的虛擬函數,允許派生類重寫該函數
override:在派生類中重寫基類的虛擬函數,標記為override確保函數簽名與基類中的函數匹配
Animal* animal1 = new Dog();:基類的指針指向派生類Dog的物件,這允許在運行時動態綁定調用派生類的makeSound函數
總結:
多型允許基類指針或引用根據實際對象的類型調用派生類的函數,這實現了代碼的靈活性和可擴展性
虛擬函數提供了實現多型的關鍵機制,允許在運行時確定調用哪個版本的函數